package 炫彩元素类

import (
	xc "gitee.com/go_888/xcgui/xcgui/xc"
	xcc "gitee.com/go_888/xcgui/xcgui/xcc"
)

// X结构_滚动视图 滚动视图.
type X结构_滚动视图 struct {
	X结构_基础元素
}

// 滚动视_创建, 创建滚动视图元素, 返回元素句柄.
//
// x: 元素x坐标.
//
// y: 元素y坐标.
//
// cx: 宽度.
//
// cy: 高度.
//
// hParent: 父是窗口资源句柄或UI元素资源句柄. 如果是窗口资源句柄将被添加到窗口, 如果是元素资源句柄将被添加到元素.
func X创建滚动视(元素x坐标, 元素y坐标, 宽度, 高度 int32, 父窗口句柄 int) *X结构_滚动视图 {
	p := &X结构_滚动视图{}
	p.X设置句柄(xc.X滚动视_创建(元素x坐标, 元素y坐标, 宽度, 高度, 父窗口句柄))
	return p
}

// 从句柄创建对象.
func X创建滚动视并按句柄(句柄 int) *X结构_滚动视图 {
	p := &X结构_滚动视图{}
	p.X设置句柄(句柄)
	return p
}

// 从name创建对象, 失败返回nil.
func X创建滚动视并按名称(名称 string) *X结构_滚动视图 {
	handle := xc.X取对象并按名称(名称)
	if handle > 0 {
		p := &X结构_滚动视图{}
		p.X设置句柄(handle)
		return p
	}
	return nil
}

// 从UID创建对象, 失败返回nil.
func X创建滚动视并按UID(UID int32) *X结构_滚动视图 {
	handle := xc.X取对象并按UID(UID)
	if handle > 0 {
		p := &X结构_滚动视图{}
		p.X设置句柄(handle)
		return p
	}
	return nil
}

// 从UID名称创建对象, 失败返回nil.
func X创建滚动视并按UID名称(名称 string) *X结构_滚动视图 {
	handle := xc.X取对象并按UID名称(名称)
	if handle > 0 {
		p := &X结构_滚动视图{}
		p.X设置句柄(handle)
		return p
	}
	return nil
}

// 滚动视_置视图大小, 设置内容大小, 如果内容改变返回TRUE否则返回FALSE.
//
// cx: 宽度.
//
// cy: 高度.
func (s *X结构_滚动视图) X设置视图大小(宽度, 高度 int32) bool {
	return xc.X滚动视_设置视图大小(s.X句柄, 宽度, 高度)
}

// 滚动视_取视图大小, 获取内容总大小.
//
// pSize: 大小.
func (s *X结构_滚动视图) X取视图大小(大小 *xc.X结构_大小) *X结构_滚动视图 {
	xc.X滚动视_取视图大小(s.X句柄, 大小)
	return s
}

// 滚动视_置滚动单位大小, 设置滚动单位大小, 如果内容改变返回TRUE否则返回FALSE.
//
// nWidth: 宽度.
//
// nHeight: 高度.
func (s *X结构_滚动视图) X设置滚动单位大小(宽度, 高度 int32) bool {
	return xc.X滚动视_设置滚动单位大小(s.X句柄, 宽度, 高度)
}

// 滚动视_取滚动单位大小, 获取滚动单位大小.
//
// pSize: 返回大小.
func (s *X结构_滚动视图) X取滚动单位大小(返回大小 *xc.X结构_大小) *X结构_滚动视图 {
	xc.X滚动视_取滚动单位大小(s.X句柄, 返回大小)
	return s
}

// 滚动视_置滚动条大小.
//
// size: 滚动条大小.
func (s *X结构_滚动视图) X设置滚动条大小(滚动条大小 int32) *X结构_滚动视图 {
	xc.X滚动视_设置滚动条大小(s.X句柄, 滚动条大小)
	return s
}

// 滚动视_取视口原点X, 获取视口原点X坐标.
func (s *X结构_滚动视图) X取视口原点X() int32 {
	return xc.X滚动视_取视口原点X(s.X句柄)
}

// 滚动视_取视口原点Y, 获取视口原点Y坐标.
func (s *X结构_滚动视图) X取视口原点Y() int32 {
	return xc.X滚动视_取视口原点Y(s.X句柄)
}

// 滚动视_取视口宽度.
func (s *X结构_滚动视图) X取视口宽度() int32 {
	return xc.X滚动视_取视口宽度(s.X句柄)
}

// 滚动视_取视口高度.
func (s *X结构_滚动视图) X取视口高度() int32 {
	return xc.X滚动视_取视口高度(s.X句柄)
}

// 滚动视_取视口坐标.
//
// pRect: 坐标.
func (s *X结构_滚动视图) X取视口坐标(矩形 *xc.X结构_矩形) *X结构_滚动视图 {
	xc.X滚动视_取视口坐标(s.X句柄, 矩形)
	return s
}

// 滚动视_取水平滚动条, 返回滚动条句柄.
func (s *X结构_滚动视图) X取水平滚动条() int {
	return xc.X滚动视_取水平滚动条(s.X句柄)
}

// 滚动视_取垂直滚动条, 返回滚动条句柄.
func (s *X结构_滚动视图) X取垂直滚动条() int {
	return xc.X滚动视_取垂直滚动条(s.X句柄)
}

// 滚动视_水平滚动, 水平滚动条, 滚动到指定位置点.
//
// pos: 位置点.
func (s *X结构_滚动视图) X水平滚动(位置点 int32) bool {
	return xc.X滚动视_水平滚动(s.X句柄, 位置点)
}

// 滚动视_垂直滚动, 垂直滚动条, 滚动到指定位置点.
//
// pos: 位置点.
func (s *X结构_滚动视图) X垂直滚动(位置点 int32) bool {
	return xc.X滚动视_垂直滚动(s.X句柄, 位置点)
}

// 滚动视_水平滚动到X, 水平滚动条, 滚动到指定坐标.
//
// posX: X坐标.
func (s *X结构_滚动视图) X水平滚动到X(坐标 int32) bool {
	return xc.X滚动视_水平滚动到X(s.X句柄, 坐标)
}

// 滚动视_垂直滚动到Y, 垂直滚动条, 滚动到指定坐标.
//
// posY: Y坐标.
func (s *X结构_滚动视图) X垂直滚动到Y(Y坐标 int32) bool {
	return xc.X滚动视_垂直滚动到Y(s.X句柄, Y坐标)
}

// 滚动视_显示水平滚动条.
//
// bShow: 是否显示.
func (s *X结构_滚动视图) X显示水平滚动条(是否显示 bool) *X结构_滚动视图 {
	xc.X滚动视_显示水平滚动条(s.X句柄, 是否显示)
	return s
}

// 滚动视_显示垂直滚动条.
//
// bShow: 是否显示.
func (s *X结构_滚动视图) X显示垂直滚动条(是否显示 bool) *X结构_滚动视图 {
	xc.X滚动视_显示垂直滚动条(s.X句柄, 是否显示)
	return s
}

// 滚动视_启用自动显示滚动条.
//
// bEnable: 是否启用.
func (s *X结构_滚动视图) X启用自动显示滚动条(是否启用 bool) *X结构_滚动视图 {
	xc.X滚动视_启用自动显示滚动条(s.X句柄, 是否启用)
	return s
}

// 滚动视_向左滚动.
func (s *X结构_滚动视图) X向左滚动() bool {
	return xc.X滚动视_向左滚动(s.X句柄)
}

// 滚动视_向右滚动.
func (s *X结构_滚动视图) X向右滚动() bool {
	return xc.X滚动视_向右滚动(s.X句柄)
}

// 滚动视_向上滚动.
func (s *X结构_滚动视图) X向上滚动() bool {
	return xc.X滚动视_向上滚动(s.X句柄)
}

// 滚动视_向下滚动.
func (s *X结构_滚动视图) X向下滚动() bool {
	return xc.X滚动视_向下滚动(s.X句柄)
}

// 滚动视_滚动到左侧, 水平滚动到左侧.
func (s *X结构_滚动视图) X滚动到左侧() bool {
	return xc.X滚动视_滚动到左侧(s.X句柄)
}

// 滚动视_滚动到右侧, 水平滚动到右侧.
func (s *X结构_滚动视图) X滚动到右侧() bool {
	return xc.X滚动视_滚动到右侧(s.X句柄)
}

// 滚动视_滚动到顶部, 垂直滚动到顶部.
func (s *X结构_滚动视图) X滚动到顶部() bool {
	return xc.X滚动视_滚动到顶部(s.X句柄)
}

// 滚动视_滚动到底部, 垂直滚动到底部.
func (s *X结构_滚动视图) X滚动到底部() bool {
	return xc.X滚动视_滚动到底部(s.X句柄)
}

// ------------------------- 事件 ------------------------- //

type X事件_滚动视图_水平滚动 func(pos int32, pbHandled *bool) int            // 滚动视图元素水平滚动事件,滚动视图触发.
type X事件_滚动视图_水平滚动1 func(hEle int, pos int32, pbHandled *bool) int // 滚动视图元素水平滚动事件,滚动视图触发.
type X事件_滚动视图_垂直滚动 func(pos int32, pbHandled *bool) int            // 滚动视图元素垂直滚动事件,滚动视图触发.
type X事件_滚动视图_垂直滚动1 func(hEle int, pos int32, pbHandled *bool) int // 滚动视图元素垂直滚动事件,滚动视图触发.

// 滚动视图元素水平滚动事件,滚动视图触发.
func (s *X结构_滚动视图) X事件_水平滚动(回调函数 X事件_滚动视图_水平滚动) bool {
	return xc.X元素_注册事件C(s.X句柄, xcc.X元素事件_滚动视图_水平滚动, 回调函数)
}

// 滚动视图元素水平滚动事件,滚动视图触发.
func (s *X结构_滚动视图) X事件_水平滚动1(回调函数 X事件_滚动视图_水平滚动1) bool {
	return xc.X元素_注册事件C1(s.X句柄, xcc.X元素事件_滚动视图_水平滚动, 回调函数)
}

// 滚动视图元素垂直滚动事件,滚动视图触发.
func (s *X结构_滚动视图) X事件_垂直滚动(回调函数 X事件_滚动视图_垂直滚动) bool {
	return xc.X元素_注册事件C(s.X句柄, xcc.X元素事件_滚动视图_垂直滚动, 回调函数)
}

// 滚动视图元素垂直滚动事件,滚动视图触发.
func (s *X结构_滚动视图) X事件_垂直滚动1(回调函数 X事件_滚动视图_垂直滚动1) bool {
	return xc.X元素_注册事件C1(s.X句柄, xcc.X元素事件_滚动视图_垂直滚动, 回调函数)
}

// ------------------------- AddEvent ------------------------- //

// AddEvent_ScrollView_Scroll_H 添加滚动视图元素水平滚动事件.
//
// pFun: 回调函数.
//
// allowAddingMultiple: 允许添加多个回调函数.
func (s *X结构_滚动视图) AddEvent_ScrollView_Scroll_H(pFun X事件_滚动视图_水平滚动1, allowAddingMultiple ...bool) int {
	return EventHandler.AddCallBack(s.X句柄, xcc.X元素事件_滚动视图_水平滚动, onXE_SCROLLVIEW_SCROLL_H, pFun, allowAddingMultiple...)
}

// onXE_SCROLLVIEW_SCROLL_H 滚动视图元素水平滚动事件.
func onXE_SCROLLVIEW_SCROLL_H(hEle int, pos int32, pbHandled *bool) int {
	cbs := EventHandler.GetCallBacks(hEle, xcc.X元素事件_滚动视图_水平滚动)
	var ret int
	for i := len(cbs) - 1; i >= 0; i-- {
		if cbs[i] != nil {
			ret = cbs[i].(X事件_滚动视图_水平滚动1)(hEle, pos, pbHandled)
			if *pbHandled {
				break
			}
		}
	}
	return ret
}

// AddEvent_ScrollView_Scroll_V 添加滚动视图元素垂直滚动事件.
//
// pFun: 回调函数.
//
// allowAddingMultiple: 允许添加多个回调函数.
func (s *X结构_滚动视图) AddEvent_ScrollView_Scroll_V(pFun X事件_滚动视图_垂直滚动1, allowAddingMultiple ...bool) int {
	return EventHandler.AddCallBack(s.X句柄, xcc.X元素事件_滚动视图_垂直滚动, onXE_SCROLLVIEW_SCROLL_V, pFun, allowAddingMultiple...)
}

// onXE_SCROLLVIEW_SCROLL_V 滚动视图元素垂直滚动事件.
func onXE_SCROLLVIEW_SCROLL_V(hEle int, pos int32, pbHandled *bool) int {
	cbs := EventHandler.GetCallBacks(hEle, xcc.X元素事件_滚动视图_垂直滚动)
	var ret int
	for i := len(cbs) - 1; i >= 0; i-- {
		if cbs[i] != nil {
			ret = cbs[i].(X事件_滚动视图_垂直滚动1)(hEle, pos, pbHandled)
			if *pbHandled {
				break
			}
		}
	}
	return ret
}
